import { defineStore } from 'pinia';
import curdUtils from "/@/stores/ums/customer/curdUtils";


/**
 * 客户来源 - 全局缓存
 */
export const sourceCache = defineStore('source', {
	state: ():any => ({
		// 列表
		list: [],
		// get 加载的锁
		lock: false,
		// 类型
		type: -1,
		// 标题
		title: '客户来源'
	}),

	/** 计算属性 */
	getters: {

		// 获取渠道列表
		channelList: state => {
			return state.list.filter((cl:any) => cl.pid === '0')
		},

	},

	actions: {

		/**
		 * 添加
		 * @param domain 添加数据对象
		 */
		async add(domain:any): Promise<boolean>{
			return await this.addData(domain, null, this.loadList, '客户来源')
		},

		/*
			选择来源 》 id > 计算属性
			选这客户来源 Id 筛选出来源的具体的场景
		 */
		findSceneById(channelId: string): Array<any> {
			// 检查非空
			if (!channelId) return []
			return this.getList().filter((sl: any) => sl.pid === channelId)
		},

		/**
		 * 获取
		 * 1、不一定立即能获取到
		 * 2、因为有异步加载，返回的对象是引用
		 */
		getList(): Array<any> {
			// 检查是否有数据
			if (this.isLoad(this.lock, this.list)) {
				this.lock = true
				this.loadList()
			}
			return this.list
		},

		/** 加载 */
		async loadList(){

		},


		/**
		 * 批量修改显示或隐藏
		 * @param ids 需要显示 ID
		 * @param pid 父级 ID
		 */
		async batchVisibleByIds(ids: any, pid: string): Promise<boolean> {
			return await this.doBatchVisible(ids, {'pid': pid}, null, this.loadList, this.title)
		},

		init(){
			if (this.isLoad(this.lock, this.list)) {
				this.lock = true
				this.loadList()
			}
		},

		// 公共方法
		...curdUtils
	},
});



